package com.bangdream.michelia.sql.greendao;

import org.greenrobot.greendao.AbstractDao;
import org.greenrobot.greendao.Property;

import java.util.List;

/**
 * Created by Mr.Wang on 2017/8/8.
 * 909732184@qq.com
 * greendao数据库操作试例
 */

public class DbHelper {
    private static volatile DbHelper mInstance = null;
    public static DbHelper getInstance() {
        if (mInstance == null) {
            synchronized (DbHelper.class) {
                if (mInstance == null) {
                    mInstance = new DbHelper();
                }
            }
        }
        return mInstance;
    }

    private DbHelper() {
    }

    /**
     * 添加数据，如果有重复则覆盖
     *
     * @param bean
     */
    public synchronized<T> void insertData(AbstractDao<T,Long> dao,T bean) {
        //dao.insert(bean); 有重复不覆盖
        dao.insertOrReplace(bean);              //主键重复则覆盖数据
    }

    /**
     * 添加数据，如果有重复则覆盖
     * @param beanList
     */
    public synchronized<T> void insertDataList(AbstractDao<T,Long> dao,List<T> beanList) {
        dao.insertOrReplaceInTx(beanList);
    }

    /**
     * 根据id删除数据
     *
     * @param id
     */
    public synchronized<T> void deleteDataById(AbstractDao<T,Long> dao,long id) {
        dao.deleteByKey(id);
    }

    /**
     * 删除所有数据
     */
    public synchronized<T> void deleteDataAll(AbstractDao<T,Long> dao) {
        dao.deleteAll();
    }

    /**
     * 更新数据
     * @param dao
     */
    public synchronized <T> void updateData(AbstractDao<T, Long> dao,T bean) {
        dao.update(bean);
    }

    /**
     * 查询所有condition=value的数据
     *  按条件查询列表
     * @return
     */
    public synchronized <T> List<T> queryListByCondition(AbstractDao<T, Long> dao, Property condition, String value) {
        //return MainApplication.getDaoInstant().getSiteLoginBeanDao().queryBuilder().where(SiteLoginBeanDao.Properties.Name.eq(value)).list();
        return dao.queryBuilder().where(condition.eq(value)).list();
    }
    /**
     * 查询一条condition=value的数据
     *  按条件查询列表
     * @return
     */
    public synchronized <T> T queryUniqueByCondition(AbstractDao<T, Long> dao, Property condition, String value) {
        //return MainApplication.getDaoInstant().getSiteLoginBeanDao().queryBuilder().where(SiteLoginBeanDao.Properties.Name.eq(value)).list();
        return dao.queryBuilder().where(condition.eq(value)).build().unique();
    }

    /**
     * 查询全部数据
     */
    public synchronized <T> List<T> queryAll(AbstractDao<T, Long> dao) {
        //return dao.queryBuilder().orderAsc().list();
        return dao.loadAll();
    }
    /**
     * 倒叙查询全部数据
     * condition 根据...倒叙
     */
    public synchronized <T> List<T> queryDescAll(AbstractDao<T, Long> dao,Property condition) {
        return dao.queryBuilder().orderDesc(condition).list();
    }
//    增加单个数据
//    getShopDao().insert(shop);
//    getShopDao().insertOrReplace(shop);
//    增加多个数据
//    getShopDao().insertInTx(shopList);
//    getShopDao().insertOrReplaceInTx(shopList);
//    查询全部
//    List< Shop> list = getShopDao().loadAll();
//    List< Shop> list = getShopDao().queryBuilder().list();
//    查询附加单个条件
//        .where()
//        .whereOr()
//    查询附加多个条件
//        .where(, , ,)
//        .whereOr(, , ,)
//    查询附加排序
//        .orderDesc()
//        .orderAsc()
//    查询限制当页个数
//        .limit()
//        查询总个数
//                .count()
//    修改单个数据
//    getShopDao().update(shop);
//    修改多个数据
//    getShopDao().updateInTx(shopList);
//    删除单个数据
//    getTABUserDao().delete(user);
//    删除多个数据
//    getUserDao().deleteInTx(userList);
//    删除数据ByKey
//    getTABUserDao().deleteByKey();
//    删除表中所有数据
//    deleteAll()

}
